package controllers;

import java.io.File;
import java.text.ParseException;
import java.util.List;

import models.RepositorioUsuario;
import models.Usuario;
import play.data.Form;
import play.mvc.Controller;
import play.mvc.Http.MultipartFormData;
import play.mvc.Http.MultipartFormData.FilePart;
import play.mvc.Result;
import play.mvc.Security;
import views.html.Usuarios.atualizar;
import views.html.Usuarios.editar;
import views.html.Usuarios.listar;
import views.html.Usuarios.mostrar;
import views.html.Usuarios.remover;
import dao.DAOUsuario;

@Security.Authenticated(Secured.class)
public class Usuarios extends Controller {

	private static Form<Usuario> formUsuario = new Form<Usuario>(Usuario.class);
	private static RepositorioUsuario repUsuario = new RepositorioUsuario(
			new DAOUsuario());

	public static Result foto(String Login) {
		Usuario usuario = repUsuario.procurar(Login);
		if (usuario == null)
			return notFound("Usuario não encontrado");
		response().setContentType("image/jpeg");
		return ok(usuario.foto).as("image/jpeg");
	}

	public static Result listar() {
		List<Usuario> usuarios = repUsuario.todos();
		return ok(listar.render(usuarios));
	}

	public static Result mostrar(String Login) {
		Usuario usuario = repUsuario.procurar(Login);
		if (usuario == null)
			return notFound("Usuario não encontrado");
		return ok(mostrar.render(usuario));
	}

	public static Result editar(String Login) throws ParseException {	
		Usuario usuario = repUsuario.procurar(Login);
		if (usuario == null)
			return notFound("Usuario não encontrado");
		Form<Usuario> novoUsuario = new Form<Usuario>(Usuario.class);
		novoUsuario.fill(usuario);
		return ok(editar.render(usuario));
	}

	public static Result atualizar() {
		MultipartFormData body = request().body().asMultipartFormData();
		FilePart picture = body.getFile("foto");
		File foto = null;
		if (picture != null) {
			foto = picture.getFile();
		}
		Form<Usuario> novoUsuario = formUsuario.bindFromRequest();
		Usuario usuario = novoUsuario.get();
		usuario.foto = foto;
		repUsuario.atualizar(usuario);
		return ok(atualizar.render(usuario));
	}

	public static Result remover(String Login) {
		Usuario usuario = new Usuario();
		usuario.login = Login;
		repUsuario.excluir(usuario);
		return ok(remover.render(usuario));
	}

}
